/**@mainpage 自动寻迹观光车
* <table>
* <tr><th>Project  <td>ROS_CAR 
* <tr><th>Author   <td>circleup 
* <tr><th>Source   <td>~/workspace/ROSCAR/src
* </table>
* @section   项目详细描述
* -# 通过 CG610 传回的经纬度、偏航角、速度等信息来判断当前车的状态
* -# 通过当前状态以及事先的规划路径，实现寻迹功能，发送控制指令给下位机
* -# 通过下位机的 CAN 协议，发送控制指令，包括油门、档位、刹车、转向角度去控制车的移动
*
* @section   功能描述  
* -# 本工程基于 ROS（kinetic） 开发
* -# 使用 LCCAN 或工控机自身的 EMUCCAN 与下位机进行通讯，RS232 与 CGI610 通讯
* 
* @section   用法描述
* -# 把工程下的 default.rviz 文件拷贝至 ~/.rviz 文件夹下；
* -# 使用 sudo apt install ros-kinetic-serial 安装串口库；
* -# 使用 catkin_make 编译代码；
* -# 使用 roslaunch ros_car ros_record.launch 启动记录模式，用于保存 gps.txt 文件；
* -# 使用 roslaunch ros_car ros_autocar_emuc.launch 或 roslaunch ros_car ros_autocar_lc.launch 启动自动寻迹模式。
* 
* @section   程序更新 

* <table>
* <tr><th>Date        <th>H_Version <th>Author    <th>Description  </tr>

* <tr><td>2020-07-09  <td>2.9      <td>circleup  <td>
* -# 删除调试用注释；
* -# 添加 rviz 默认配置。</tr>

* <tr><td>2020-07-08  <td>2.8      <td>circleup  <td>
* -# 添加工控机 CAN 驱动代码；
* -# 修改库位置，从 /usr/lib -> lib/；
* -# 添加使用 EMUC CAN 的 launch 文件。</tr>

* <tr><td>2020-07-08  <td>2.7      <td>circleup  <td>
* -# 添加增量式 PID 控制车速。</tr>

* <tr><td>2020-07-06  <td>2.6      <td>circleup  <td>
* -# 修正坐标转换相关的所有经纬度参数相反的 BUG；
* -# 添加 RVIZ 显示规划及当前轨迹（相对位置）。</tr>

* <tr><td>2020-07-01  <td>2.5      <td>circleup  <td>
* -# 修正 DoubleToString() 函数不能正确显示零的问题；
* -# 改用一次性加载所有规划点；
* -# 添加简单的位置式 PID 控制转向角度。</tr>

* <tr><td>2020-06-30  <td>2.4      <td>circleup  <td>
* -# 修改 ros_map_plan.srv 文件名为 map_paln.srv；
* -# 添加保存 GPS 数据到 gps.txt 文件的功能；
* -# 添加从 gps.txt 读取规划文件，并添加返回两个 GPS 点角度的服务函数。</tr>

* <tr><td>2020-06-29  <td>2.3      <td>circleup  <td>
* -# 解决串口收发数据卡死问题；
* -# 添加 ROS_map_plan.cpp ROS_map_plan.h 文件；
* -# 添加规划点结算 Service 服务。</tr>

* <tr><td>2020-06-28  <td>2.2      <td>circleup  <td>
* -# 添加 car_pid.cpp、car_pid.h 文件；
* -# 添加 ros_serial_driver.cpp、ros_serial_driver.h 文件。</tr>

* <tr><td>2020-06-25  <td>2.1      <td>circleup  <td>
* -# 添加 doxygen 注释 </tr>

* <tr><td>2020-06-23  <td>1.10      <td>circleup  <td>
* -# 添加 ros_gather.launch 启动文件
* -# 添加 ros_control.cpp 和 ros_control_driver.h，用于接受串口数据（通过订阅话题）和发送控制指令到 LCCAN 上（通过发布话题）
* -# 添加 GPS 数据解析函数，通过经纬度返回距离（椭球体算法） </tr>

* <tr><td>2020-06-22  <td>1.9       <td>circleup  <td>
* -# 添加 ROS_Serial.launch 启动文件
* -# 添加 CGI610 仿真数据解析函数并将数据发布到话题 serial_receive_data 上
* -# 按照 ROS CppStyleGuide 修改格式（未加 doxygen） </tr>

* <tr><td>2020-06-22  <td>1.8       <td>circleup  <td>
* -# 添加 serial 订阅及发布节点
* -# 删除不需要的节点 talk_listern，删除 CanData.srv 文件，删除不需要的注释 </tr>

* <tr><td>2020-06-19  <td>1.7       <td>circleup  <td>
* -# 修改 launch 文件，实现多窗口启动不同节点，并在窗口发送节点名称 </tr>

* <tr><td>2020-06-19  <td>1.6       <td>circleup  <td>
* -# 修正角度值设置函数，并添加阈值处理 </tr>

* <tr><td>2020-06-18  <td>1.5       <td>circleup  <td>
* -# 添加修改数据帧的修改函数，包括油门，刹车，档位等
* -# 添加 CAN 口相关的宏定义 </tr>

* <tr><td>2020-06-17  <td>1.4       <td>circleup  <td>
* -# 添加对串口的支持，初步实现在 ROS 下读写串口 </tr>

* <tr><td>2020-06-17  <td>1.3       <td>circleup  <td>
* -# 把消息的格式改为 lCCAN 的数据帧格式，用于 CAN_send_data、CAN_receive_data 的订阅及发布，实现了 CAN 的数据透传 </tr>

* <tr><td>2020-06-16  <td>1.2       <td>circleup  <td>
* -# 添加 VCC_FRAME_DATA 结构体，该结构体为 CAN 通讯使用命令结构
* -# 把封装的函数独立出来，变成 ros_can_driver.cpp，并将结构体的定义独立在 ros_can_driver.h
* -# 添加 ros_car.launch 文件
* -# 将包名 lccan 更改为 ros_car </tr>

* <tr><td>2020-06-16  <td>1.1       <td>circleup  <td>
* 创建初始版本
* -# ROS_CAN 中完成对 LCCAN 的读写功能;
* -# ROS_CAN 节点订阅 talker_CAN 节点实现，并将数据发送到 LCCAN 的 CAN0 口
* -# listener_CAN 节点订阅 ROS_CAN 节点，并将读取到的数据发布到 ROS中 </tr>

* </table>

**********************************************************************************
*/